package io.gitee.hchaojie.day07;

import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

public class TestFiles {
    // visitor 封装了文件处理的逻辑
    private FileVisitor<Path> visitor = new FileVisitor<Path>() {
        // 访问目录之前要做的事情
        @Override
        public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
            // 继续访问
            return FileVisitResult.CONTINUE;
        }

        // 访问文件时，所作的处理
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            System.out.println(file.getFileName());

            // file.toFile() 将Path类转化成File类
            // File file1 = file.toFile();

            if (file.getFileName().toString().startsWith("Exam1")) {
                System.out.println("####");
                // 遍历终止
                return FileVisitResult.TERMINATE;
            }

            // CONTINUE: 继续遍历
            return FileVisitResult.CONTINUE;    // 枚举
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
        }

        // 访问目录之后做的处理
        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
        }
    };

    @Test
    public void testListFile() throws IOException {
        File folder = new File(".\\");

        long start = System.currentTimeMillis();    // 取当前时间的毫秒数

        // 遍历文件树
        // Files, Paths(跟路径相关的工具类)
        java.nio.file.Files.walkFileTree(Paths.get("src\\io\\gitee\\hchaojie"), visitor);

        long end = System.currentTimeMillis();

        System.out.println("耗时：" + (end - start));
    }
}
